// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/04/Fill.asm

// Runs an infinite loop that listens to the keyboard input.
// When a key is pressed (any key), the program blackens the screen,
// i.e. writes "black" in every pixel;
// the screen should remain fully black as long as the key is pressed. 
// When no key is pressed, the program clears the screen, i.e. writes
// "white" in every pixel;
// the screen should remain fully clear as long as no key is pressed.

// Put your code here.

  @8192
  D=A
  @sizeOfScreenRAM
  M=D
  @i
  M=0
  @lastKBDState
  M=0
(WATCH)
  // reset i
  @i
  M=0
  // if KBD state has not changed, do nothing
  @KBD
  D=M
  @lastKBDState
  D=D-M
  @WATCH
  D;JEQ
  @lastKBDState
  M=D
  // if press key, goto BLACK
  @KBD
  D=M
  @BLACK
  D;JNE
  // if not press key, goto WHITE
  @WHITE
  D;JEQ

(BLACK)
  // if i == sizeOfScreenRAM, goto WATCH
  @i
  D=M
  @sizeOfScreenRAM
  D=D-M
  @WATCH
  D;JEQ
  // RAM[SCREEN + i] = -1
  @SCREEN
  D=A
  @i
  A=D+M
  M=-1
  // i++
  @i
  M=M+1
  // goto BLACK
  @BLACK
  0;JMP

(WHITE)
  // if i == sizeOfScreenRAM, goto WATCH
  @i
  D=M
  @sizeOfScreenRAM
  D=D-M
  @WATCH
  D;JEQ
  // RAM[SCREEN + i] = -1
  @SCREEN
  D=A
  @i
  A=D+M
  M=0
  // i++
  @i
  M=M+1
  // goto WHITE
  @WHITE
  0;JMP

(END)
  @END
  0;JMP